package BitCreekLib; /**
 * @author Ivan Litsvinenka & Emanuele Ricci
 * Interfaccia di TorrentMetaDati
 *
 */

import BitCreekTracker.TrackerPeer;

import java.util.ArrayList;


public interface ITorrentMetaDati {

    /**
     * Metodo utilizzato per ottenere l'interfaccia del primo Peer che ha pubblicato il torrent
     *
     * @return L'interfaccia del primo Peer che ha pubblicato il torrent
     */
    public IRMIPeer getIFirstSeeder ();

    /**
     * Metodo utilizzato per ottenere le porte TCP e UDP relative al torrent
     *
     * @return La coppia di porte TCP e UDP
     */
    public Ports getTrackerPorts ();

    /**
     * Metodo utilizzato per settare le porte TCP e UDP relative al torrent
     *
     * @param ports La coppia di porte TCP e UDP
     */
    public void setTrackerPorts ( Ports ports);

    /**
     * Metodo utilizzato per aggiungere un peer all'elenco di quelli connessi per il torrent
     *
     * @param peer Le informazioni sul peer
     */
    public void addPeer ( Host peer );

    /**
     * Metodo utilizzato per ottenere le informazioni relative ad un torrent
     *
     * @return Le informazioni di un torrent
     */
    public MetaInfo getMetaInfo ();

    /**
     * Metodo utilizzato per settare le informazioni di un torrent
     *
     * @param torrent Le informazioni sul torrent
     */
    public void setMetaInfo ( MetaInfo torrent );

    /**
     * Metodo utilizzato per ottenere la lista dei peer connessi per il torrent
     *
     * @return La lista dei peers
     */
    public ArrayList<TrackerPeer> getPeers ();

    public ArrayList<Host> getPeersList ();

    /**
     * Metodo utilizzato per settare la lista dei peer connessi per il torrent
     *
     * @param peers La nuova lista dei peers
     */
    public void setPeers ( ArrayList<TrackerPeer> peers );

    /**
     * Metodo utilizzato rappresentare un oggetto TorrentMetaDati sotto forma di stringa
     *
     * @return La stringa che rappresenta un oggetto TorrentMetaDati
     */
	public String toString();
	
}
